home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
program
/
gui140.zip
/
OLDGUI.BAS
< prev
next >
Wrap
BASIC Source File
|
1997-06-28
|
8KB
|
349 lines
' Graphical User Interface V. 1.0
' Written by Tika Carr
' Released into the Public Domain on November 4, 1995
' This is I think the very first official release. This is NOT part
' of the library! Its just an example to show how this project developed.
' Maybe some can get some ideas out of this to add on to the other one.
' To create the GUI library, you MUST use GUI140.BAS, NOT THIS ONE!
DECLARE SUB Mouse2 ()
DECLARE SUB Overlay (x1%, y1%, x2%, y2%, Klr%, OFlg%)
DECLARE SUB OvrWin (x1%, y1%, x2%, y2%, Klr%)
DECLARE SUB Mouse ()
DECLARE SUB CircleBtn ()
DECLARE SUB VScreen (x1%, y1%, x2%, y2%, Bkgn%)
DECLARE SUB startmouse ()
DECLARE SUB showmouse ()
DECLARE SUB getmousecord (btn%, M3%, M4%)
DECLARE SUB hidemouse ()
DECLARE SUB MakeButton (P$, XL%, KKr%, KKh%)
DECLARE SUB ButtonDraw ()
DECLARE SUB gprint (S$, x%, y%, Klr%)
' This uses VGA graphics mode 12: 640 x 480/16 color, 80 x 60 text area
DEFINT A-Z
'$INCLUDE: 'QB.BI'
TYPE COORD
bx1 AS INTEGER
bx2 AS INTEGER
Flag AS INTEGER
END TYPE
DIM SHARED Inregs AS RegType, Outregs AS RegType
DIM SHARED Buttons(1 TO 9) AS COORD
COMMON SHARED BN, Flg, Bkgn, VW, CFlag, PI, x, y, btn
PI = 3.141593
SCREEN 12: CLS
WIDTH 80, 60
'Possible Palettes:
'PALETTE 0, (65536 * 47 + 256 * 47 + 47) ' Grey Background
PALETTE 0, (65536 * 45 + 256 * 45 + 63) ' Baby Pink Background
'PALETTE 0, (65536 * 57 + 256 * 57 + 57) ' White Background
'PALETTE 0, (65536 * 50 + 256 * 47 + 0) ' Cyan Background
'Help Button Hide/Display default
HideHelp = 0: CFlag = 1
'Circle Button for Help - 0 is 'Display (don't hide)
IF HideHelp = 0 THEN
CALL CircleBtn
END IF
'Syntax: MakeButton(Title, XLocation(LOCATE), Text Color, Highlight Color)
'NOTE: Flg=1 is button is "out"; Flg=0 is button is "in"
BN = 2: Flg = 1: CALL MakeButton("File", 8, 8, 1)
' NOTE: Bkgn MUST be LESS than 8 (Bkgn values must be 0-7)
' Other combinations may or may not work. Test values before
' using them. GPRINT uses a BIOS video write to put text on screen.
'Syntax: VScreen(x1, y1, x2, y2, Bkgn)
CALL VScreen(0, 30, 639, 479, 7)
VW = 1: CALL gprint("Hello", 45, 23, 6) 'VW is view window is "on" for GPRINT
startmouse
showmouse
'Start Input
Inloop:
Mouse
IF btn = 2 THEN GOTO Done
'Check Mouse Coordinates
'Help Button
IF x < 21 AND y < 21 THEN
x1 = 314: y1 = 153: x2 = 554: y2 = 394: Klr = 3
ga = 4 + INT(((x2 - x1 + 1) * (1) + 7) / 8) * 4 * ((y2 - y1) + 1)
DIM OvScn(1 TO ga) AS INTEGER
GET (x1, y1)-(x2, y2), OvScn
CFlag = 0
CALL CircleBtn
CALL OvrWin(x1, y1, x2, y2, Klr)
CALL gprint("This is the Help Screen.", 42, 23, 2)
CALL gprint("Click Mouse to Continue.", 42, 25, 13)
Mouse
hidemouse
PUT (x1, y1), OvScn, PSET
ERASE OvScn
showmouse
CFlag = 1
CALL CircleBtn
END IF
' File Menu Activated.
IF x >= 51 AND y >= 2 AND x <= 90 AND y <= 18 THEN
Flg = 0
ButtonDraw
x1 = 32: y1 = 34: x2 = 115: y2 = 146: Klr = 3
ga = 4 + INT(((x2 - x1 + 1) * (1) + 7) / 8) * 4 * ((y2 - y1) + 1)
DIM OvScn(1 TO ga) AS INTEGER
GET (x1, y1)-(x2, y2), OvScn
VW = 1: OFlg = 1
CALL Overlay(x1, y1, x2, y2, Klr, OFlg)
CALL gprint("New", 5, 2, 13)
CALL gprint("Open", 5, 4, 13)
CALL gprint("Save", 5, 6, 13)
CALL gprint("Save As..", 5, 8, 13)
CALL gprint("Print", 5, 10, 13)
CALL gprint("Exit", 5, 12, 13)
Mouse
'Exit Option
mx1 = 35: my1 = 123: mx2 = 112: my2 = 138: mKlr = 3: mOFlg = 0
IF x > mx1 AND x < mx2 AND y > my1 AND y < my2 THEN
hidemouse
CALL Overlay(mx1, my1, mx2, my2, mKlr, mOFlg)
CALL gprint("Exit", 5, 12, 1)
showmouse
Mouse2
IF x > mx1 AND x < mx2 AND y > my1 AND y < my2 THEN
END
ELSE
GOTO DDN
END IF
END IF
'Print Option
'The mx values are 16 less that that of the Exit option
'(8 pixels/row so since they are every other row, 8 * 2 = 16)
mx1 = 35: my1 = 107: mx2 = 112: my2 = 122: mKlr = 3: mOFlg = 0
IF x > mx1 AND x < mx2 AND y > my1 AND y < my2 THEN
hidemouse
CALL Overlay(mx1, my1, mx2, my2, mKlr, mOFlg)
'Note here we change gprint to reflect the Print option and its
'y coordinate location.
CALL gprint("Print", 5, 10, 1)
showmouse
Mouse2
IF x > mx1 AND x < mx2 AND y > my1 AND y < my2 THEN
'Action for Print Option goes here.
ELSE
GOTO DDN
END IF
END IF
DDN:
hidemouse
PUT (x1, y1), OvScn, PSET
showmouse
ERASE OvScn
Flg = 1
ButtonDraw
END IF
GOTO Inloop
Done:
'Pause Display and Wait for Keypress
'Pause$ = INPUT$(1)
hidemouse
SUB ButtonDraw
hidemouse
yb = Buttons(BN).bx2 - Buttons(BN).bx1
IF Flg = 1 THEN k1 = 15: k2 = 8 ELSE k1 = 8: k2 = 15
DRAW "C" + STR$(k1) + "BM" + STR$(Buttons(BN).bx1) + ",18U15R" + STR$(yb)
DRAW "C" + STR$(k2) + "BM" + STR$(Buttons(BN).bx1) + ",18R" + STR$(yb) + "U15"
showmouse
END SUB
SUB CircleBtn
hidemouse
LINE (9, 0)-(11, 11), 0, BF
CIRCLE (10, 11), 10, 8
PAINT (10, 11), 12, 8
IF CFlag = 1 THEN c1 = 15: c2 = 8 ELSE c1 = 8: c2 = 15
CIRCLE (10, 11), 9, c1, 1, INT(PI + 1)
CIRCLE (10, 11), 9, c2, INT(PI + 1), .5
VW = 0: CALL gprint("?", 1, 2, 3) 'Note: VW is view window ON/OFF; 0=OFF
'NOTE: above colors for GPRINT: 2 is Yellow, 3 is White
' for last number: GPRINT($, x, y, color)
showmouse
END SUB
SUB getmousecord (btn%, M3%, M4%)
Inregs.ax% = 3
CALL INTERRUPT(&H33, Inregs, Outregs)
M3% = Outregs.cx%
M4% = Outregs.dx%
btn% = Outregs.bx%
END SUB
SUB gprint (S$, x, y, Klr)
IF VW = 1 THEN y = y + 5
IF Klr < 10 THEN
Klr = Klr + 8
B = (Bkgn XOR Klr) - 8
ELSE
B = Bkgn XOR Klr
END IF
IF B < 10 THEN B$ = "&HF" + HEX$(B) ELSE B$ = "&HF" + HEX$(B)
Inregs.bx% = VAL(B$)
Inregs.cx% = 1
AH$ = "9"
FOR count = 1 TO LEN(S$)
A$ = MID$(S$, count, 1)
AL$ = HEX$(ASC(A$))
Inregs.ax% = VAL("&H" + AH$ + AL$)
LOCATE y, x + count
CALL INTERRUPT(&H10, Inregs, Outregs)
NEXT count
END SUB
SUB hidemouse
Inregs.ax% = 2
CALL INTERRUPT(&H33, Inregs, Outregs)
END SUB
SUB MakeButton (P$, XL, KKr, KKh)
'Highlight First Character
PH$ = LEFT$(P$, 1): PR$ = RIGHT$(P$, LEN(P$) - 1)
COLOR KKh: LOCATE 2, XL: PRINT PH$;
COLOR KKr: PRINT PR$
Buttons(BN).bx1 = (XL - 1) * 8 - 4
Buttons(BN).bx2 = Buttons(BN).bx1 + (LEN(P$) * 8) + 6
LINE (Buttons(BN).bx1 - 1, 2)-(Buttons(BN).bx2 + 1, 19), 8, B
CALL ButtonDraw
END SUB
SUB Mouse
DO
getmousecord btn, x, y
LOCATE 59, 5
PRINT x, y, btn;
LOOP WHILE btn = 0
END SUB
SUB Mouse2
DO
getmousecord btn, x, y
LOCATE 59, 5
PRINT x, y, btn;
LOOP WHILE btn <> 0
DO
getmousecord btn, x, y
LOCATE 59, 5
PRINT x, y, btn;
LOOP WHILE btn = 0
END SUB
SUB Overlay (x1, y1, x2, y2, Klr, OFlg)
IF OFlg = 1 THEN c1 = 15: c2 = 8 ELSE c1 = 8: c2 = 15
hidemouse
LINE (x1, y1)-(x2, y2), 8, B
PAINT (x1 + 1, y1 + 1), Klr, 8
DRAW "c" + STR$(c1) + "bm" + STR$(x1 + 1) + "," + STR$(y2 - 1) + "U" + STR$(y2 - y1 - 2) + "R" + STR$(x2 - x1 - 2)
DRAW "c" + STR$(c2) + "bm" + STR$(x1 + 1) + "," + STR$(y2 - 1) + "R" + STR$(x2 - x1 - 2) + "U" + STR$(y2 - y1 - 2)
showmouse
END SUB
SUB OvrWin (x1, y1, x2, y2, Klr)
A = x1 + 1: B = y2 - 1: C = y2 - y1 - 2
E = x1 + 9: F = y2 - 9: G = y2 - y1 - 18
LINE (x1, y1)-(x2, y2), 8, B
PAINT (x1 + 10, y1 + 10), Klr, 8
LINE (x1 + 8, y1 + 9)-(x2 - 8, y2 - 8), 8, B
PAINT (x1 + 10, y1 + 10), Klr, 8
DRAW "C15BM" + STR$(A) + "," + STR$(B) + "U" + STR$(C) + "R" + STR$(C)
DRAW "C8BM" + STR$(A) + "," + STR$(B) + "R" + STR$(C - 1) + "U" + STR$(C - 1)
DRAW "C8BM" + STR$(E) + "," + STR$(F) + "U" + STR$(G) + "R" + STR$(G)
DRAW "C15BM" + STR$(E) + "," + STR$(F - 1) + "R" + STR$(G - 1) + "U" + STR$(G - 1)
END SUB
SUB showmouse
Inregs.ax% = 1
CALL INTERRUPT(&H33, Inregs, Outregs)
END SUB
SUB startmouse
Inregs.ax% = 0
CALL INTERRUPT(&H33, Inregs, Outregs)
MouseInitialize% = Outregs.ax%
END SUB
SUB VScreen (x1, y1, x2, y2, Bkgn)
LINE (x1, y1)-(x2, y2), 8, B
PAINT (x1 + 1, y1 + 1), Bkgn, 8
DRAW "c8bm" + STR$(x1 + 1) + "," + STR$(y2 - 1) + "u" + STR$(y2 - y1) + "r" + STR$(x2 - x1)
DRAW "c15bm" + STR$(x1 + 1) + "," + STR$(y2 - 1) + "r" + STR$(x2 - x1 - 2) + "u" + STR$(y2 - y1)
END SUB